package com.gxc.string;

import java.util.*;

/**
 * 给定两个字符集合，一个是全量字符集，一个是已占用字符集，已占用字符集中的字符不能再使用。
 *
 * 要求输出剩余可用字符集。
 *
 * 输入描述
 * 输入一个字符串 一定包含@，@前为全量字符集 @后的为已占用字符集
 * 已占用字符集中的字符一定是全量字符集中的字符
 * 字符集中的字符跟字符之间使用英文逗号隔开
 * 每个字符都表示为字符+数字的形式用英文冒号分隔，比如a:1标识一个a字符
 * 字符只考虑英文字母，区分大小写
 * 数字只考虑正整型 不超过100
 * 如果一个字符都没被占用 @标识仍存在，例如 a:3,b:5,c:2@
 * 输出描述
 * 输出可用字符集
 * 不同的输出字符集之间用回车换行
 * 注意 输出的字符顺序要跟输入的一致，如下面用例不能输出b:3,a:2,c:2
 * 如果某个字符已全部占用 则不需要再输出
 */
public class ResidualSet {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        String[] split = str.split("@");

        if (split.length == 1) {
            System.out.println(split[0]);
            return;
        }

        List<Pair> all = process(split[0]);
        List<Pair> used = process(split[1]);

        Map<String, java.lang.Integer> map = new HashMap<>();
        for (Pair pair : used) {
            map.put(pair.key, pair.value);
        }

        StringBuilder builder = new StringBuilder();
        for (int j = 0; j < all.size(); j++) {
            Pair pair = all.get(j);
            java.lang.Integer usedN = map.getOrDefault(pair.key, 0);
            int i = pair.value - usedN;
            if (i>0) {
                builder.append(pair.key).append(":").append(i);
            }
            if (j != all.size() - 1) {
                builder.append(",");
            }
        }
        System.out.println(builder);
    }

    private static List<Pair> process(String str) {
        List<Pair> res = new ArrayList<>();

        String[] split = str.split(",");
        for (int i = 0; i < split.length; i++) {
            String s = split[i];
            String[] q = s.split(":");
            Map<String, Integer> map = new HashMap<>();
            res.add(new Pair(q[0], java.lang.Integer.parseInt(q[1])));
        }
        return res;
    }

}
 class Pair {
    String key;
    int value;
    Pair(String key, int value) {
        this.key = key;
        this.value = value;
    }
}
